/-boot
/-docs
/-editor
/-files
/-files-old
/-imports
/-layout
/-shell
/-storage ...
/-storage/attached ...
/-storage/attached/api
/-storage/attached/dom
/-storage/attached/indexedDB ...
DetectStorage.ts
FileData.ts
LoadStorage.ts
MetadataData.ts
StorageAccess.ts
StorageDetect.ts
UpdateStorage.ts
functions.ts
/-storage/attached/localStorage
/-storage/attached/webSQL
/-tests
/-tests/files
/-tests/storage
/-tests/storage/attached
AttachedStorageTests.ts
AttachedStorageTestsNew.ts
DomStorageTests.ts
IndexedDBStorageTests.ts
LocalStorageStorageTests.ts
WebSQLStorageTests.ts
TestCase.html
TestCase.ts
TestPage.css
TestPage.html
TestPage.ts
_sampleTests.ts
teapo-tests.html
teapo-tests.ts
/-typings
Dom.ts
TypeScriptService.ts
functions.ts
ko.ts
nteapo.html
persistence.api.ts
persistence.ts
shell.ts
teapo.html
teapo.ts
try.html
try.js
x
    }
 
8
    }
9
​
10
    detect(
11
      uniqueKey: string,
12
      callback: (error: Error, metadata: attached.StorageDetect.BootState, access: StorageAccess) => void) {
13
​
14
      if (!this._window.indexedDB) {
15
        callback(new Error('No indexedDB object exposed from window.'), null, null);
16
        return;
17
      }
18
​
19
      if (typeof this._window.indexedDB.open !== 'function') {
20
        callback(new Error('No open method exposed on indexedDB object.'), null, null);
21
        return;
22
      }
23
​
24
      var dbName = uniqueKey || 'teapo';
25
​
26
      var openRequest = this._window.indexedDB.open(dbName, 1);
27
      openRequest.onerror = (errorEvent) => callback(wrapErrorEvent(errorEvent, 'detectStorageAsync-open'), null, null);
28
​
29
      openRequest.onupgradeneeded = (versionChangeEvent) => {
30
        var db: IDBDatabase = openRequest.result;
31
        var filesStore = db.createObjectStore('files', { keyPath: 'path' });
32
        var metadataStore = db.createObjectStore('metadata', { keyPath: 'property' });
33
      };
34
​
35
      openRequest.onsuccess = (event) => {
36
        var db: IDBDatabase = openRequest.result;
37
​
38
        var transaction = db.transaction('metadata');
39
        transaction.onerror = (errorEvent) => callback(wrapErrorEvent(errorEvent, 'detectStorageAsync-openRequest.onsuccess-transaction'), null, null);
40
​
41
        var metadataStore = transaction.objectStore('metadata');
42
​
43
        var editedUTCRequest = metadataStore.get('editedUTC');
44
​
45
        editedUTCRequest.onerror = (errorEvent) => {
46
          this._proceedOpen(null, db, callback);
47
        };
48
​
49
        editedUTCRequest.onsuccess = (event) => {
50
          var result: MetadataData = editedUTCRequest.result;
51
          this._proceedOpen(result && typeof result.value === 'number' ? result.value : null, db, callback);
52
        };
53
​
54
      };
55
​
56
    }
57
​
58
    private _proceedOpen(
59
      editedUTC: number,
60
      db: IDBDatabase,
61
      callback: (error: Error, metadata: attached.StorageDetect.BootState, access: StorageAccess) => void) {
62
​
63
      var transaction = db.transaction('files');
64
      transaction.onerror = (errorEvent) => callback(wrapErrorEvent(errorEvent, 'load: transaction'), null, null);
65
      var filesStore = transaction.objectStore('files');
66
      var cursorRequest = filesStore.openCursor();
67
      cursorRequest.onerror = (errorEvent) => callback(wrapErrorEvent(errorEvent, 'load: objectStore-openCursor'), null, null);
68
​
69
      var filenames: string[] = [];
70
​
71
      cursorRequest.onsuccess = (event) => {
72
        var cursor: IDBCursor = cursorRequest.result;
73
​
74
        if (!cursor) {
75
          var meta = { editedUTC: editedUTC, files: filenames };
76
          var access = new StorageAccess(db);
77
          callback(null, meta, access);
78
          return;
79
        }
80
​
81
        var result: FileData = (<any>cursor).value;
82
        if (result && result.properties) {
83
          filenames.push(result.path);
84
        }
85
​
86
        cursor.continue();
87
      };
88
    }
89
​
90
  }
91
​
92
}
50:37 _proceedOpen(editedUTC: number, db: IDBDatabase, callback: (error: Error, metadata: teapo.storage.attached.StorageDetect.BootState, access: teapo.storage.attached.indexedDB.StorageAccess) => void): void